<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>统计数字</title>
<style type="text/css">
button{
	padding: 0px 10px;
	margin-right: 10px
}
</style>
<script type="text/javascript">
// 定义类
function A(){
	this.all = [];
	this.min = null;
	this.max = null;
	this.sum = 0;
	this.avg = null;
	
	// js 的对象属性，必须使用this引用
	this.add = function( num ){
		this.all.push(num);
	}
	
	this.process = function(){
		this.sum = 0;
		for (let num of this.all) {
			if (this.min == null) {
				this.min = this.max = num;
			} else {
				if (this.min > num) {
					this.min = num;
				}
				if (this.max < num) {
					this.max = num;
				}
			}
			this.sum += num;
		}
		this.avg = this.sum / this.all.length;
	}
}

// 通过类创建对象
var a = new A();

//直接创建对象
var a = new Object();
a.all = [];   // 动态添加 all 属性   =》 Java 不支持（静态语言）
a.min = null;
a.max = null;
a.sum = 0;
a.avg = null;

// js 的对象属性，必须使用this引用
a.add = function( num ){
	this.all.push(num);
}

a.process = function(){
	this.sum = 0;
	for (let num of this.all) {
		if (this.min == null) {
			this.min = this.max = num;
		} else {
			if (this.min > num) {
				this.min = num;
			}
			if (this.max < num) {
				this.max = num;
			}
		}
		this.sum += num;
	}
	this.avg = this.sum / this.all.length;
}

// json 格式创建对象
var a = {
	all : [],
	max : null,
	min : null,
	num : 0,
	avg : null,
	number1 : [],//奇数
	number2 : [],//偶数
	number3 : [],//质数
	number4 : [],//小于平均值的数
	// 定义对象方法的语法 1
	add : function(num){
		this.all.push(num);
	},
	//定义对象方法的语法 2
	process(){
		this.sum = 0;
		for (let num of this.all) {
			if (this.min == null) {
				this.min = this.max = num;
			} else {
				if (this.min > num) {
					this.min = num;
				}
				if (this.max < num) {
					this.max = num;
				}
			}
			this.sum += num;
		}
		this.avg = this.sum / this.all.length;
		//扩展
		for (let num of this.all){
			if(num%2 == 1){
				this.number1.push(num);
			}
			if(num%2 == 0){
				this.number2.push(num);
			}
			//质数
			if(isPrimeNumber(num) != null){
				this.number3.push(num);
			}
			if(num<this.avg){
				this.number4.push(num);
			}
			
		}
	}
} ;  // var a = new Object();

//判断质数的函数
function isPrimeNumber(num){
	if(num == 2){
		return num;
	}
	for(var i=2;i < num;i++){
		if(num%i==0){
			return null;
		}
	}
	return num;
}



// js 对象转成 json 字符串
var json = JSON.stringify(a);
console.info(json); // 函数不能转成 json 字符串



function add(){
	// prompt()  提示用户输入值
	let input = prompt("请输入数字");
	// 转数字
	let number = parseInt(input);
	// 添加到 a 对象中
	a.add(number);
	
}

function process(){
	a.process();
	maxnum.innerText = a.max;
	minnum.innerText = a.min;
	avgnum.innerText = a.avg;
	sumnum.innerText = a.sum;
	allnum.innerText = a.all.join(","); //join 函数
}

//随机添加10个数字
function randomAdd(){
	//循环十次
	for(var i=0;i<10;i++){
		a.add(parseInt((Math.random()*100)+1));
	}
	a.process();
	showResult();
}

//移除所有奇数
function removUneven(){
	//arrayObject.splice(index,howmany,item1,.....,itemX)
	//index开始删除的位置   howmany删除多少个  item1,.....,itemX添加的元素(可选)
	a.number1.splice(0,a.number1.length);
	num1.innerText = a.number1.join("   ,");
}

//逆向显示数组
function reverseShow(){
	//reverse()颠倒数组中元素的顺序。
	a.number1.reverse();
	a.number2.reverse();
	a.number3.reverse();
	a.number4.reverse();
	showResult();
}

//降序排序
function desc(){
	a.number1.sort().reverse();
	a.number2.sort().reverse();
	a.number3.sort().reverse();
	a.number4.sort().reverse();
	showResult();
}

//升序排序
function asce(){
	a.number1.sort();
	a.number2.sort();
	a.number3.sort();
	a.number4.sort();
	showResult();
}

//显示结果
function showResult(){
	num1.innerText = a.number1.join("   ,");
	num2.innerText = a.number2.join("   ,");
	num3.innerText = a.number3.join("   ,");
	num4.innerText = a.number4.join("   ,");
}


</script>


</head>
<body style="width: 800px; margin: 10px auto">
	<div>
		<h3>案例说明：依次输入多个数字，根据要求输出结果</h3>
		全部值：<span id="allnum"></span>
		<br>
		最大值：<span id="maxnum"></span>
		<br>
		最小值：<span id="minnum"></span>
		<br>
		平均值：<span id="avgnum"></span>
		<br>
		合计值：<span id="sumnum"></span>
		<br>
		<button onclick="add()">添加数字</button> 要求：使用prompt函数添加数字<br>
		<button onclick="process()">统计结果</button> 要求：使用confirm函数提示用户确认操作
		<hr>
		<h3>扩展练习</h3>
		奇数：<span id="num1"></span>
		<br>
		偶数：<span id="num2"></span>
		<br>
		质数：<span id="num3"></span>
		<br>
		小于平均值的数：<span id="num4"></span>
		<br>
		<button onclick="randomAdd()">随机添加10个数字</button>
		<button onclick="reverseShow()">逆向显示数组</button>
		<button onclick="desc()">降序排序</button>
		<button onclick="asce()">升序排序</button>
		<button onclick="removUneven()">移除所有奇数</button>

	</div>
	<script src="../00-答案/03-对象编程：统计数字.js">
		
		
	</script>
</body>

</html>